#ifndef _ThinLensCamera_H_
#define _ThinLensCamera_H_

#pragma once
#include "Camera.h"

class ThinLensCamera : public Camera {
private:
	Vector3 eye, dir, u, v;
	Double viewDistance;
	Double lensRadius, focalDistance;

public:
	ThinLensCamera() : Camera() {}
	~ThinLensCamera() {}

	void setViewDistance(double d);
	void setEyePosition(const Vector3 &eye, const Normal3 &dir, const Normal3 &up = Normal3(0, 1, 0));
	void setFocalDistance(double d);
	void setLensRadius(Double r);

	void generateRay(Ray &ray, const Vector2 &pixelSample, const Vector2 &apertureSample) const;
};

#endif // _ThinLensCamera_H_